package com.jic.member.impl;

import com.alibaba.fastjson.JSONObject;
import com.jic.member.constant.consist.ResponseCode;
import com.jic.member.exception.AppRuntimeException;
import com.jic.member.mapper.TSmsTouchSettingsMapper;
import com.jic.member.entity.TSmsTouchSettings;
import com.jic.member.service.TSmsTouchSettingsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 接口实现类
 *
 * @author : 建投数据科技(山东)有限公司
 * @version : v1.0.0
 * @email :
 * @since : 2020-03-09 10:12:20
 */
@Service
@Slf4j
public class TSmsTouchSettingsServiceImpl implements TSmsTouchSettingsService {

  @Resource
  private TSmsTouchSettingsMapper mapper;

  /**
   * 新增记录
   *
   * @param request 需要保存的入参实体类
   * @return int 是否保存成功
   */
  @Override
  public int save(TSmsTouchSettings request) {
    int flag = mapper.insert(request);
    if (flag == 1) {
      return 1;
    } else {
      throw new AppRuntimeException(ResponseCode.EXCEPTION, "新增失败");
    }
  }

  /**
   * 保存或修改记录信息
   *
   * @param request 需要保存的入参实体类
   * @return int 是否保存或修改成功 author 建投数据科技(山东)有限公司
   * @date 2020-3-11 20:54:09
   */
  @Override
  public int saveOrUpdate(TSmsTouchSettings request) {
    log.info("保存或修改记录信息，入参 = {}", JSONObject.toJSONString(request));
    try {
      if (request == null) {
        throw new AppRuntimeException(ResponseCode.EXCEPTION, "入参为空");
      }
      if (request.getId() != null) {
        log.info("保存或修改记录信息，修改，入参 = {}", JSONObject.toJSONString(request));
        int flag = mapper.updateById(request);
        if (flag == 1) {
          return 1;
        }
      } else {
        log.info("保存或修改记录信息，保存，入参 = {}", JSONObject.toJSONString(request));
        int flag = mapper.insertSelective(request);
        if (flag == 1) {
          return 1;
        } else {
          throw new AppRuntimeException(ResponseCode.EXCEPTION, "修改失败");
        }
      }
    } catch (Exception e) {
      log.error("用户保存或修改失败", e);
      throw new AppRuntimeException(ResponseCode.EXCEPTION, "用户保存或修改失败");
    }
    return -1;
  }

  /**
   * 删除记录
   *
   * @param request 需要删除,含有主键的入参实体类
   * @return int 是否删除成功
   */
  @Override
  public int deleteByPrimaryKey(TSmsTouchSettings request) {
    int flag = mapper.deleteByPrimaryKey(request);
    if (flag == 1) {
      return 1;
    } else {
      throw new AppRuntimeException(ResponseCode.EXCEPTION, "删除失败");
    }
  }

  /**
   * 逻辑删除记录
   *
   * @param request 含有主键的逻辑删除实体类
   * @return int 是否逻辑删除成功
   */
  @Override
  public int deleteByPrimaryKeyLogically(TSmsTouchSettings request) {
    request.setDeleteFlag(1);
    int flag = mapper.updateByPrimaryKey(request);
    if (flag == 1) {
      return 1;
    } else {
      throw new AppRuntimeException(ResponseCode.EXCEPTION, "逻辑删除记录失败");
    }
  }

  /**
   * 修改
   *
   * @param request
   * @return
   */
  @Override
  public int updateByPrimaryKeySelective(TSmsTouchSettings request) {
    try {
      log.info("修改记录");
      TSmsTouchSettings param = new TSmsTouchSettings();
      BeanUtils.copyProperties(request, param);
      int flag = mapper.updateByPrimaryKeySelective(param);
      if (flag == 1) {
        return 1;
      } else {
        throw new AppRuntimeException(ResponseCode.EXCEPTION, "修改记录失败");
      }
    } catch (Exception e) {
      log.error("修改记录失败", e);
      throw new AppRuntimeException(ResponseCode.EXCEPTION, "修改记录失败");
    }

  }

  /**
   * 记录详情
   *
   * @param request 查询的入参实体类
   * @return 数据库查询到的实体类
   */
  @Override
  public TSmsTouchSettings getByPrimaryKey(TSmsTouchSettings request) {
    return mapper.selectByPrimaryKey(request);
  }

  /**
   * 不分页查询
   *
   * @param request 不分页查询入参实体类
   * @return 数据库查到的实体类列表
   */
  @Override
  public List<TSmsTouchSettings> listAllRecord(TSmsTouchSettings request) {
    //分页处理
    request.setDeleteFlag(0);
    return mapper.selectBySelective(request);
  }

  @Override
  public List<TSmsTouchSettings> getSmsInfoByDeptId() {
    return mapper.getSmsInfoByDeptId().stream().filter(item -> item.getNumberLimit() != null).collect(Collectors.toList());
  }
}
